﻿Imports System.Text
Imports geraLaudosAutomatico

Public Class frmAvaliacao
    Inherits formPadrao


    Dim Sep As Char
    Dim Nombre As Double
    Dim dt As New DataTable
    Dim row As DataRow
    Public WithEvents ucPreambulo As New ucPreambulo
    Private nomeDiretorio As String = Nothing
    Public WithEvents btnLimpar As System.Windows.Forms.Button
    Private registro As New registroVO
    Private mensagem As String
    Private erroNivel As Integer = 0
    Private _ehDireta As Boolean
    Private tipoAvaliacao As String
    



    Public Property EHDIRETA() As Boolean
        Get
            Return _ehDireta
        End Get
        Set(value As Boolean)
            _ehDireta = value
        End Set
    End Property

    Public Property getUcPreambulo() As ucPreambulo
        Get
            Return ucPreambulo
        End Get
        Set(ByVal value As ucPreambulo)
            ucPreambulo = value
        End Set
    End Property


    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()
        pnlDados.Controls.Add(ucPreambulo)
        If Not DesignMode Then
            Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
            pnlDados.AutoSize = True
            pnlItens.AutoSize = True
            Me.AutoScroll = True


        End If
    End Sub

    Private Sub txtValor_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValor.KeyPress

        If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True

    End Sub

    Private Sub txttQtde_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txttQtde.KeyPress
        If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click

        incluirItemGridView()

    End Sub

    Private Sub incluirItemGridView()

        Dim gravar As Boolean = True

        Try
            For Each controle As Control In pnlItens.Controls

                If TypeOf (controle) Is TextBox Then

                    If controle.Text.Equals(String.Empty) Then

                        erroProvider.SetError(controle, "Campo obrigatório")

                        gravar = False
                    Else
                        erroProvider.SetError(controle, "")

                    End If

                End If
            Next

            If gravar Then

                If Not (IsNumeric(txttQtde.Text)) Then
                    erroProvider.SetError(txttQtde, "Formato do campo inválido")
                ElseIf Not IsNumeric(txtValor.Text) Then
                    erroProvider.SetError(txtValor, "Formato do campo inválido")

                Else
                    erroProvider.SetError(txttQtde, "")
                    erroProvider.SetError(txtValor, "")
                    erroProvider.SetError(txtDescricao, "")
                    gridDados.Rows.Add(txttQtde.Text, txtDescricao.Text.ToUpper, (txtValor.Text), FormatCurrency(CDbl(txttQtde.Text * txtValor.Text)))
                    limpaDadosLista()
                End If
            End If

        Catch ex As Exception

            generica.gravaErro(ex)

        End Try

    End Sub

    Private Sub limpaDadosLista()

        txttQtde.Text = String.Empty
        txtDescricao.Text = String.Empty
        txtValor.Text = String.Empty
        txttQtde.Focus()


    End Sub


    Private Sub btxEcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btxEcluir.Click

        If gridDados.Rows.Count > 0 Then

            gridDados.Rows.Clear()
            gridDados.DataSource = Nothing
        End If



    End Sub

    Private Sub gridDados_CellContextMenuStripNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventArgs) Handles gridDados.CellContextMenuStripNeeded

    End Sub




    Private Sub gridDados_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gridDados.CellEndEdit

        Try

            If (e.ColumnIndex = gridDados.Columns("QTDE").Index And e.RowIndex >= 0) Then

                gridDados.Rows(e.RowIndex).Cells("TOTALITEM").Value = FormatCurrency(CDbl(gridDados.Rows(e.RowIndex).Cells("QTDE").Value * gridDados.Rows(e.RowIndex).Cells("VALORUNIT").Value))

            ElseIf (e.ColumnIndex = gridDados.Columns("VALORUNIT").Index And e.RowIndex >= 0) Then

                gridDados.Rows(e.RowIndex).Cells("TOTALITEM").Value = FormatCurrency(CDbl(gridDados.Rows(e.RowIndex).Cells("QTDE").Value * gridDados.Rows(e.RowIndex).Cells("VALORUNIT").Value))

            End If

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub TextboxNumeric_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)

        Dim nonNumberEntered As Boolean

        nonNumberEntered = True

        If (e.KeyChar >= Convert.ToChar(48) AndAlso e.KeyChar <= Convert.ToChar(57)) OrElse e.KeyChar = Convert.ToChar(8) OrElse e.KeyChar = Convert.ToChar(44) Then

            nonNumberEntered = False

        End If

        If nonNumberEntered = True Then

            ' Stop the character from being entered into the control

            ' since it is non-numerical.

            e.Handled = True

        Else

            e.Handled = False

        End If

    End Sub

    Private Sub gridDados_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gridDados.CellContentClick

        If (e.ColumnIndex = gridDados.Columns("DELETE").Index And e.RowIndex >= 0) Then

            gridDados.Rows.Remove(gridDados.Rows(e.RowIndex))

        End If

    End Sub
    Private Sub gridDados_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles gridDados.EditingControlShowing
        If CInt((DirectCast((sender), System.Windows.Forms.DataGridView).CurrentCell.ColumnIndex)) = 0 Or CInt((DirectCast((sender), System.Windows.Forms.DataGridView).CurrentCell.ColumnIndex)) = 2 Then
            AddHandler e.Control.KeyPress, AddressOf Me.TextboxNumeric_KeyPress
        End If
    End Sub

    Private Sub frmAvaliacao_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Try



            Me.WindowState = FormWindowState.Maximized
            generica.redimensionaControle(pnlDados)
            generica.redimensionaControle(pnlItens)
            ucPreambulo.ucPerito.Enabled = True
            gridDados.AutoGenerateColumns = False
            ucPreambulo.selecionaIdTipoPericia = 12



            If ucPreambulo.ID_NATUREZA = 52 Then

                EHDIRETA = True

            Else
                EHDIRETA = False
            End If

            If EHDIRETA Then

                ucPreambulo.lblTitulo.Text = "FORMULÁRIO AVALIAÇÃO DIRETA"
                rdDireta.Checked = True
                tipoAvaliacao = "direta"
            Else
                ucPreambulo.lblTitulo.Text = "FORMULÁRIO AVALIAÇÃO INDIRETA"
                rdbIndireta.Checked = True
                tipoAvaliacao = "indireta"
            End If

            ucPreambulo.selecionaIdNatureza = ucPreambulo.ID_NATUREZA
            ucPreambulo.pnlNatureza.Enabled = False

            Me.ControlBox = False
            If generica.gravaBanco Then
                ucPreambulo.btnBuscaLaudo.Enabled = True
            Else
                ucPreambulo.btnBuscaLaudo.Enabled = False
            End If


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub


    '--------------------------------------------------------------------------------------------------------------------------------
    ' FUNÇÃO QUE IRÁ GERAR O LAUDO
    '--------------------------------------------------------------------------------------------------------------------------------


    Private Sub geraLaudo()

        Dim regBO As New registroBO

        generica.tempo = Now

        Dim oWordTemp As New WordAppl
        Dim detalhes As String
        Dim devolve As String = "Com o laudo devolve(em)-se o(s) material(is) submetido(s) a exames"
        Dim total As Double = 0

        Dim registroBo As New registroBO


        '-----------------------------------------------------------------------------------------
        ' ABRE O ARQUIVO WORD
        '-----------------------------------------------------------------------------------------

        If registroGlobal.registroPincipal.ID_REGISTRO > 0 Or ucPreambulo.ehNovo Then

            pb.zeraContador()
            pb.stepBarra(10)
            pb.Visible = True
            pb.stepBarra(10)
            '-----------------------------------------------------------------------------------------
            ' GRAVA REGISTRO NA BASE DE DADOS
            '-----------------------------------------------------------------------------------------
            Try

                If generica.gravaBanco Then
                    pb.stepBarra(10)

                    '------------------------------------------------------------------------------------
                    ' VERFICA SE É UM NOVO REGISTRO OU SE É UM REGISTRO JÁ ARMAZENADO NA BASE DE DADOS
                    '------------------------------------------------------------------------------------
                    pb.stepBarra(10)

                    Dim provas As New StringBuilder
                    Dim textoProva As String = String.Empty
                    For Each row As DataGridViewRow In gridDados.Rows

                        'provas.Append(row.Cells(0).Value).Append("-").Append(row.Cells(1).Value).Append("/").Append(row.Cells(2).Value).Append("/").Append(row.Cells(3).Value)
                        provas.Append(row.Cells(1).Value)
                        provas.Append("    ")
                    Next
                    If provas.ToString.Length > 250 Then
                        '  textoProva = provas.ToString.Substring(0, 250)
                        textoProva = "MATERIAIS DIVERSOS"
                    Else
                        textoProva = provas.ToString
                    End If

                    If rdbIndireta.Checked Then
                        textoProva = "NENHUM MATERIAL"
                    End If

                    pb.stepBarra(10)

                    Dim registroGravado As Integer

                    '---------------------------------------------------------------------------------
                    'VERIFICA SE O REGISTRO ESTÁ BLOQUEADO POR OUTRO USUÁRIO
                    '--------------------------------------------------------------------------------


                    If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO = False Then

                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                   ucPreambulo.getNumeroLaudo, "AVALIACAO " & tipoAvaliacao, ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                        registroGravado = regBO.updateRegistro(registroGlobal.registroPincipal, _
                                                               textoProva, ucPreambulo.getIdPeritoSelecionado, _
                                                               nomeDiretorio, ucPreambulo)
                        pb.stepBarra(10)
                        mensagem = (" O laudo n°" & registroGravado & " foi atualizado com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                    Else

                        Dim reg As New registroVO
                        Dim ultimo As Integer = regBO.getUltimoRegistro
                        Dim registroTemporario As Integer = 0
                        If ultimo <> ucPreambulo.getNumeroLaudo Then
                            registroTemporario = ucPreambulo.getNumeroLaudo
                            ucPreambulo.getNumeroLaudo = ultimo
                        End If

                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                   ucPreambulo.getNumeroLaudo, "AVALIACAO " & tipoAvaliacao, ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                        reg = generica.populaRegistro(ucPreambulo, generica.retornaNomeArquivoCompleto(nomeDiretorio & ".doc", nomeDiretorio), textoProva)
                        registroGravado = regBO.insereRegistro(reg)
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                        If registroTemporario = 0 Then
                            mensagem = (" O laudo n°" & registroGlobal.registroPincipal.NUM_REGISTRO & " foi inserido com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        Else
                            mensagem = (" O laudo n°" & ultimo & " foi inserido com sucesso na base de dados. O laudo não foi gravado com o número inicial " & registroTemporario & " pelo fato de outro usuário ter inserido este número de laudo no banco de dados. Clique no ícone do WORD para visualizar o laudo.")
                        End If
                        pb.stepBarra(10)
                    End If


                    '------------------------------------------------------------------------------------
                    ' INSERE ITENS DA LISTA DE AVALIACAO
                    '------------------------------------------------------------------------------------
                    Dim itens_avaliacaoBO As New itens_avaliacaoBO
                    Dim lista As List(Of Integer)
                    lista = itens_avaliacaoBO.insereRegistro(gridDados, ucPreambulo)
                    pb.stepBarra(10)
                    '------------------------------------------------------------------------------------
                    ' INSERE DADOS NA TABELA PONTUACAO
                    '------------------------------------------------------------------------------------

                    Dim pontuacaobo As New pontuacaoBO
                    Dim pontuacao As New pontuacaoVO
                    Dim i As Integer

                    If ucPreambulo.ehNovo Then
                        With pontuacao
                            .USUARIO = New usuarioVO With {.ID_USUARIO = ucPreambulo.getIdPeritoSelecionado}
                            .REGISTRO = New registroVO With {.ID_REGISTRO = registroGlobal.registroPincipal.ID_REGISTRO}
                            .PONTUACAO = registroGlobal.registroPincipal.NATUREZA.PONTOS_ATENDIMENTO
                            .TIPO_OCORRENCIA = "ATENDIMENTO"
                            .DATA_ALTERACAO = Now
                        End With

                        i = pontuacaobo.inserePontuacao(pontuacao)

                    Else
                        i = pontuacaobo.upDatePontuacao(ucPreambulo.getIdPeritoSelecionado, registroGlobal.registroPincipal)
                    End If

                Else
                    mensagem = ("O sistema está configurado para não gravar registros na base de dados do sistema de registro eletrônico. Para habilitar, clique em configurações > Configurar aplicação e marque a opção <<SIM>>>. Apenas o laudo de n° " & ucPreambulo.getNumeroLaudo & " será gerado. Clique no ícono do WORD para visualizar o documento.")
                End If
                '-------------------------------------------------------------------------------------
                ' INSERE DADOS ITENS DA TABELA NA BASE LOCAL
                '-------------------------------------------------------------------------------------
                'MsgBox("versao de teste")
                'If True Then
                '    Throw New Exception
                'End If

            Catch ex As Exception
                generica.encerraProcessosWord()
                habilita(False, False, False, False)
                generica.gravaErro(ex)
                erroNivel = 1
                Exit Sub
            End Try

            Try

                Dim diretorio As String = System.Configuration.ConfigurationManager.AppSettings("dirTemplateword")
                oWordTemp.OpenModelo("avaliacao.dot")
                oWordTemp.SaveAs(nomeDiretorio, nomeDiretorio & ".doc")
                oWordTemp.Quit()
                oWordTemp = Nothing
                'System.Threading.Thread.Sleep(500)
                '------------------------------------------------------------------------------------------------
                ' CRIA O PREMABULO
                '------------------------------------------------------------------------------------------------
                Dim oWord As New WordAppl
                oWord.Open(nomeDiretorio, nomeDiretorio & ".doc")
                oWord.criaPreambulo(ucPreambulo)
                '------------------------------------------------------------------------------------------------
                ' INSERE ITENS NA TABELA DO DOCUMENTO WORD
                '------------------------------------------------------------------------------------------------
                total = oWord.insereTabela(gridDados)
                pb.stepBarra(10)
                oWord.FindAndReplacement("<<valor>>", String.Format("{0:C}", total))
                oWord.FindAndReplacement("<<extenso>>", String.Format("{0:C}", generica.retornaPrimeiraMaiscula(generica.extensoValor(total))))
                If rdDireta.Checked Then
                    oWord.FindAndReplacement("<<tipoAvaliacao>>", rdDireta.Text.ToLower)
                    tipoAvaliacao = "DIRETA"
                Else
                    oWord.FindAndReplacement("<<tipoAvaliacao>>", rdbIndireta.Text.ToLower)
                    tipoAvaliacao = "INDIRETA"
                End If

                If rdDireta.Checked Then
                    If gridDados.Rows.Count > 2 Then
                        devolve = "Com o laudo devolvem-se os materiais submetidos a exames"
                    Else
                        devolve = "Com o laudo devolve-se o material submetido a exames"

                    End If
                Else

                    devolve = String.Empty

                End If

                pb.stepBarra(10)
                If rdSim.Checked And grupDetalhes.Visible And gridDados.Rows.Count > 2 = True Then
                    detalhes = "Por falta de maiores detalhes dos produtos submetidos à avaliação, o valor foi mensurado entre a média do menor e o maior preço encontrado no mercado."
                ElseIf rdSim.Checked And grupDetalhes.Visible And gridDados.Rows.Count = 1 Then
                    detalhes = "Por falta de maiores detalhes do produto submetido à avaliação, o valor foi mensurado entre a média do menor e o maior preço encontrado no mercado."
                Else
                    detalhes = String.Empty
                End If

                oWord.FindAndReplacement("<<detalhes>>", detalhes)
                oWord.FindAndReplacement("<<stringDevolve>>", devolve)
                oWord.criaAssinatura(ucPreambulo)
                oWord.Save()
                oWord.Quit()
                oWord = Nothing
                pb.stepBarra(10)
                '--------------------------------------------------------------------------------------------
                ' CHAMA ROTINA PARA LIMPAR CAMPOS DO CONTROLE E DO DATAGRID VIEW
                '-----------------------------------------------------------------------------------------------------------------------

            Catch exc As Exception
                generica.encerraProcessosWord()
                generica.gravaErro(exc)
                erroNivel = 2
                Exit Sub
            End Try


        Else

            '----------------------------------------------------------------------------------------------------------------------------
            ' CASO SEJA UM ARQUIVO QUE JÁ SE ENCONTRA CADASTRADO NA BASE DE DADOS
            '----------------------------------------------------------------------------------------------------------------------------
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                habilita(False)
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " já existe registrado na base de dados.Clique no ícone do WORD para visualizar o laudo.")
            Else
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " não foi encontrado na base de dados.")
            End If
        End If
        MsgBox(mensagem)
    End Sub
    Private Sub habilita(ByVal habilita As Boolean, _
                         Optional ByVal habilitaBarra As Boolean = Nothing, _
                         Optional ByVal habilitaVerWord As Boolean = Nothing, _
                         Optional ByVal habilitaNatureza As Boolean = False)

        ucPreambulo.btnVerWord.Visible = habilitaVerWord
        ucPreambulo.btnGeraLaudo.Enabled = habilita
        ucPreambulo.habilitaCampos(habilita)
        pnlItens.Enabled = habilita
        ucPreambulo.selecionaIdTipoPericia = 12

        If _ehDireta Then
            ucPreambulo.selecionaIdNatureza = 52
        Else
            ucPreambulo.selecionaIdNatureza = 88
        End If
        ucPreambulo.pnlNatureza.Enabled = habilitaNatureza
        If Not IsNothing(habilitaBarra) Then
            pb.Visible = habilitaBarra
            pb.zeraContador()
        End If
    End Sub

    Private Sub btnGerarLaudo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If gridDados.Rows.Count = 0 Then
            erroProvider.SetError(txttQtde, "Informe pelo menos um item na lista")
            txttQtde.Focus()
        Else
            Dim isOk As Boolean = False
            Try
                If (generica.validaCampos(ucPreambulo)) Then
                    geraLaudo()
                End If
            Catch ex As Exception
                generica.gravaErro(ex)
            End Try
        End If
    End Sub

    Private Sub rdbIndireta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbIndireta.CheckedChanged
        If rdbIndireta.Checked Then
            grupDetalhes.Visible = True

        End If

    End Sub

    Private Sub rdDireta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdDireta.CheckedChanged
        If rdDireta.Checked Then
            grupDetalhes.Visible = False
        End If
    End Sub
    Private Sub btnLimpa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            gridDados.DataSource = Nothing
            ucPreambulo.limparCampos()
            gridDados.DataSource = Nothing

        Catch ex As Exception

            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub btnWord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try

    End Sub

    Private Sub limpaCampos()
        Try
            For Each controle In pnlItens.Controls
                If TypeOf (controle) Is TextBox Then
                    CType(controle, TextBox).Text = String.Empty
                End If
            Next
            'rdDireta.Checked = True
            'rdSim.Checked = True

            gridDados.DataSource = Nothing

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoLimpaCampos(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickLimpaCampos
        Try
            ucPreambulo.limparCampos()
            limpaCampos()
            rdbIndireta.Checked = True
            If Not IsNothing(gridDados.DataSource) Then
                gridDados.DataSource = Nothing
            Else
                gridDados.Rows.Clear()
            End If
            ucPreambulo.populaDados()
            habilita(True)
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoGeraLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickGeraLaudo
        Try
            For Each controle In pnlItens.Controls
                erroProvider.SetError(controle, String.Empty)
            Next

            'COPIAR ESTE TRECHO
            Dim regBO As New registroBO
            Dim registroVOTemp As New registroVO
            Dim novoRegistro As Integer = 0
            registroVOTemp = regBO.getRegistroSimplificado(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno)

            If registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO And ucPreambulo.ehNovo Then
                novoRegistro = regBO.getUltimoRegistro
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi inserido na base de dados por outro usuário logado no sistema. O laudo será gerado com o número " & novoRegistro)
                ucPreambulo.getNumeroLaudo = novoRegistro

            ElseIf registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO Then
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi atualizado na base de dados por outro usuário logado no sistema.")
                Exit Sub
            End If

            'FIM DO TRECHO

            If (generica.validaCampos(ucPreambulo)) Then

                If gridDados.RowCount > 0 Then
                    pb.Visible = True
                    generica.salvaPreambulo(ucPreambulo)

                    geraLaudo()
                    If erroNivel > 0 Then

                        If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then
                            MsgBox("O sistema recuperou de um erro que impediu que o registro fosse inserido com sucesso no sistema. O laudo também não foi gerado. Entre em contato com o administrador do sistema.")
                            erroNivel = 0
                            erroProvider.SetError(txttQtde, "")
                            ucPreambulo.btnLimpaCampos.PerformClick()
                        End If

                    Else
                        habilita(False, False, True, False)
                    End If
                    'ucPreambulo.limparCampos()
                    'limpaCampos()
                    'habilita(True, False, False, False)
                Else
                    erroProvider.SetError(txttQtde, "A lista de itens a serem avaliados encontra-se vazia. Adicione pelo menos um item.")
                    txttQtde.Focus()

                End If

            End If


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoVisualizaWord(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickVisualizaWord
        Try

            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord("", "", registroGlobal.registroPincipal.NOME_DIRETORIO)
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoNovoLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickNovoLaudo
        Try
            ucPreambulo.limparCampos()
            rdbIndireta.Checked = True
            If Not IsNothing(gridDados.DataSource) Then
                gridDados.DataSource = Nothing
            Else
                gridDados.Rows.Clear()
            End If
            ucPreambulo.populaDados()

            habilita(True, False, False, False)


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub


    Public Sub chamaEventoBuscaLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickBuscaLaudo
        Try

            Dim itens_avaliacaoBO As New itens_avaliacaoBO
            If Not IsNothing(gridDados.DataSource) Then
                gridDados.DataSource = Nothing
            Else
                gridDados.Rows.Clear()
            End If

            ucPreambulo.buscaDadosLaudo(ucPreambulo, Me.MdiParent)
            gridDados.DataSource = Nothing

            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                gridDados.DataSource = itens_avaliacaoBO.getItens(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno, Login.Usuario.USUARIOLOGADO.SECAO.ID_SECAO)
                habilita(False, , True, False)

            Else
                registroGlobal.IDregistroLock = registroGlobal.registroPincipal.ID_REGISTRO

                habilita(True, False, False, False)
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub gridDados_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles gridDados.CellFormatting

        Dim i As Integer = 0

        If e.ColumnIndex = 3 Then
            'For i = 0 To gridDados.Rows.Count - 1
            gridDados.Rows(e.RowIndex).Cells(3).Value = (gridDados.Rows(e.RowIndex).Cells(0).Value * gridDados.Rows(e.RowIndex).Cells(2).Value)
            ' Next
        End If

        If e.ColumnIndex = 2 Then
            ' For i = 0 To gridDados.Rows.Count - 1
            gridDados.Rows(e.RowIndex).Cells(2).Value = (gridDados.Rows(e.RowIndex).Cells(2).Value)
            ' Next

        End If
    End Sub

    Private Sub txttQtde_LostFocus(sender As Object, e As EventArgs) Handles txttQtde.LostFocus

        'Try
        '    If CType(txttQtde.Text, Integer) > 32767 Then

        '        erroProvider.SetError(txttQtde, "Valor acima do permitido pelo banco de dados. Informe valor inferior a 32.767")
        '    Else
        '        erroProvider.SetError(txttQtde, String.Empty)
        '    End If

        'Catch ex As Exception
        '    generica.gravaErro(ex)
        'End Try
    End Sub

End Class